package ar.com.taller2.grupo.last;

import java.awt.color.ColorSpace;
import java.awt.image.BufferedImage;
import java.awt.image.ColorConvertOp;
import java.io.File;
import java.util.HashMap;
import java.util.Iterator;

import ij.ImagePlus;
import ij.io.FileSaver;
import ij.process.ByteProcessor;
import ij.process.ImageConverter;


public class Entrega {
	
	public static String getNumber(int n){
		if (n >= 100)
			return ""+n;
		else if(n >= 10){
			return "0" + n;
		}
		else{
			return "00"+n;
		}
	}
	

	static float realce[]= {   1, -2, 1
			 , -2, 4, -2
			 , 1, -2, 1};
	
	static float pasaBajo[]={     0  , 1/10, 0
	 			, 1/10, 6/10, 1/10
	 			,  0  , 1/10, 0};
	
	static float difuminado[]={     1/16  , 2/16, 1/16
								  , 2/16  , 4/16, 2/16
								  ,  1/16 , 2/16, 1/16};

	
	
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		File archivo = null;
		
		if (args.length < 1 ){
			System.out.println("Ingrese archivo de imagen a ser procesado");
			return;
		}
		else{
			archivo = new File(args[0]);
			if (!archivo.exists()){
				System.out.println("El archivo "+ archivo +" No se encuentra");
			}
		}
		System.out.println("Procesando archivo:"+ archivo.getName());
		
		HashMap filtros = new HashMap();
		
		filtros.put("realce", realce);
		filtros.put("pasaBajo", pasaBajo);
		filtros.put("difuminado", difuminado);
		filtros.put("binarizacion", 0);
		
		String nombreArchivo = archivo.getName();
		nombreArchivo = nombreArchivo.substring(0, nombreArchivo.lastIndexOf('.'));
		String dirArchivo = archivo.getAbsolutePath();
		dirArchivo = dirArchivo.substring(0, dirArchivo.lastIndexOf("\\"));
		
		ImagePlus imp = new ImagePlus(args[0]);
		
		ImageConverter ic = new ImageConverter(imp);
		
		ColorSpace espacioGrises = ColorSpace.getInstance(ColorSpace.CS_GRAY);
		ColorConvertOp ccop = new ColorConvertOp (espacioGrises, null);
		
		Iterator iFiltro = filtros.keySet().iterator();
		
		while ( iFiltro.hasNext()){
			
			BufferedImage destino = ccop.filter(imp.getBufferedImage(), null);
			BufferedImage nuevaProbando = new BufferedImage(imp.getWidth(),imp.getHeight(),BufferedImage.TYPE_BYTE_GRAY); 

			ByteProcessor bp = new ByteProcessor(destino);
		
			String filtro = (String)iFiltro.next();
			if ("binarizacion".equals(filtro)){
				bp.autoThreshold();
			}
			else{
				bp.convolve((float[]) filtros.get(filtro), 3, 3);
			}
			
			try {
				ImagePlus nueva = new ImagePlus();
				nueva.setProcessor(nombreArchivo+"_"+filtro, bp);
				ImageConverter icNuevo = new ImageConverter(nueva);
				icNuevo.convertToGray8();
				FileSaver fs = new FileSaver(nueva);
				fs.saveAsJpeg(dirArchivo+"/"+nombreArchivo+"_"+filtro+".jpg");
				System.out.println("Archivo generado: "+dirArchivo+"/"+nombreArchivo+"_"+filtro+".jpg");
			} catch (Exception e) {
				// TODO: handle exception
			}
		
		}
	}
	


}
